#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int,int> PII;
const int N=300010;
int n,m;
int w[N];
bool check(int mid){
vector<int> t(n+1);
for(int i=0;i<n;++i) t[i]=w[i];
t[n]=m;
for(int i=n-1;i>=0;--i){
if(t[i+1]>=t[i]){
if(t[i]+mid>=m) t[i]=t[i+1];
else t[i]=min(t[i]+mid,t[i+1]);
}
else{
if(t[i]+mid>=m) t[i]=min(t[i+1],(t[i]+mid)%m);
else return false;
}
// cout<<t[i]<<" ";
}
// cout<<endl;
// for(int i=0;i<n;++i){
// if(w[i]>w[i+1]) return false;
// }
return true;
}
int main(){
#ifdef DEBUG
freopen("test.txt", "r", stdin);
#endif
ios::sync_with_stdio(0);
cin.tie(0);
cin>>n>>m;
for(int i=0;i<n;++i) cin>>w[i];
int l=0,r=m;
while(l<r){
int mid=l+r>>1;
if(check(mid)) r=mid;
else l=mid+1;
}
cout<<l;
// cout<<check(0)<<endl;
}
275. H-Index II | 274. H-Index |
260. Single Number III | 240. Search a 2D Matrix II |
238. Product of Array Except Self | 229. Majority Element II |
222. Count Complete Tree Nodes | 215. Kth Largest Element in an Array |
198. House Robber | 153. Find Minimum in Rotated Sorted Array |
150. Evaluate Reverse Polish Notation | 144. Binary Tree Preorder Traversal |
137. Single Number II | 130. Surrounded Regions |
129. Sum Root to Leaf Numbers | 120. Triangle |
102. Binary Tree Level Order Traversal | 96. Unique Binary Search Trees |
75. Sort Colors | 74. Search a 2D Matrix |
71. Simplify Path | 62. Unique Paths |
50. Pow(x, n) | 43. Multiply Strings |
34. Find First and Last Position of Element in Sorted Array | 33. Search in Rotated Sorted Array |
17. Letter Combinations of a Phone Number | 5. Longest Palindromic Substring |
3. Longest Substring Without Repeating Characters | 1312. Minimum Insertion Steps to Make a String Palindrome |